#ifndef __USART_H_
#define __USART_H_

#include <string.h>
#include <stdio.h>
#include "stm32f10x.h"
#include "stm32f10x_usart.h"
#include "dma.h"
#include "led.h"

/*
 *  USART1 --- 接受GPS定位的信息
 *  USART2 --- 发送与接受短信模块的信息
 *  USART3 --- 发送与接受语音播报模块的信息
 */

#define USART1_TX_PORT GPIOA               // USART1_TX端口
#define USART1_RX_PORT GPIOA               // USART1_RX端口
#define USART1_TX_PIN GPIO_Pin_9           // USART1_TX PIN
#define USART1_RX_PIN GPIO_Pin_10          // USART1_RX PIN
#define USART1_NVIC_IRQChannel USART1_IRQn // USART1中断通道

#define USART2_TX_PORT GPIOA               // USART2_TX端口
#define USART2_RX_PORT GPIOA               // USART2_RX端口
#define USART2_TX_PIN GPIO_Pin_2           // USART2_TX PIN
#define USART2_RX_PIN GPIO_Pin_3           // USART2_RX PIN
#define USART2_NVIC_IRQChannel USART2_IRQn // USART2中断通道

#define USART3_TX_PORT GPIOB               // USART3_TX端口
#define USART3_RX_PORT GPIOB               // USART3_RX端口
#define USART3_TX_PIN GPIO_Pin_10          // USART3_TX PIN
#define USART3_RX_PIN GPIO_Pin_11          // USART3_RX PIN
#define USART3_NVIC_IRQChannel USART3_IRQn // USART3中断通道

#define USARTx_REC_LEN 512 // 最大接受长度
#define GPS_Buffer_Length 512   //GPS接受最大长度

typedef struct GPS_RecvData
{
    uint8_t GPS_Buffer[GPS_Buffer_Length];
    // volatile uint8_t gpsIndex;
    // volatile uint8_t isGetData;
}GPSInfo;

void USART1_Init(u32 bound); // USART1初始化  TX1 PA.9 RX1 PA.10
void USART2_Init(u32 bound); // USART2初始化  TX2 PA.2 RX2 PA.3
void USART3_Init(u32 bound); // USART3初始化  TX3 PB.10

void USART2_DMA_SendString(const char *data); // 通过USART2_DMA发送消息
void SendVoiceMessages(char *data);           // 通过USART3_DMA发送语音消息

extern GPSInfo GPSRecvData; //GPS帧信息

extern uint16_t USART1_RX_STA;			   // 接受状态标记
extern uint8_t USART1_RX_BUF[USARTx_REC_LEN]; // 接受缓冲区，最大为USARTx_REC_LEN个字节

extern uint16_t USART2_RX_STA;							// 接受状态/*标记
extern uint8_t ShortMessageRecvBuf_usart2[USARTx_REC_LEN]; // 接受缓冲区，最大为USARTx_REC_LEN个字节

extern uint16_t USART3_RX_STA;					 // 接受状态标记
extern uint8_t VoiceRecvBuf_usart3[USARTx_REC_LEN]; // 接受缓冲区，最大为USARTx_REC_LEN个字节

#endif
